home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 2,801 to 2,900 / aol-file-protocol-4400-2801-to-2900.zip / AOLDLs / C++ Files Library / Graphic Gems I, II & III (C_C++) / Graphics Gems C Code.sea / GemsIII / partition3d / main.c next >
C/C++ Source or Header  |  1992-06-16  |  2KB  |  84 lines

  1. /* main.c: sample driver for partition module.
  2.  * Copyright (c) Norman Chin
  3.  */
  4. #include <stdio.h>
  5. #include <assert.h>
  6. #include <malloc.h>
  7. #include "GraphicsGems.h"
  8. #include "partition.h"
  9.  
  10. static FACE *getFace(/* void */);
  11. static void dumpFace(/* FACE *face, char *string */);
  12.  
  13. int main()
  14. {
  15.    FACE *inputFace;
  16.    FACE *faceOn, *faceNeg, *facePos; 
  17.    FACE *faceOn2, *faceNeg2, *facePos2;
  18.  
  19.    inputFace= getFace(); dumpFace(inputFace,"input");
  20.  
  21.    /* partition unit square on XY plane about origin */
  22.    partitionFaceWithPlane(1.0,0.0,0.0,0.0,&inputFace, 
  23.               &faceOn,&faceNeg,&facePos); 
  24.    assert(inputFace == NULL_FACE);
  25.    dumpFace(faceNeg,"negative side"); dumpFace(facePos,"positive side");
  26.  
  27.    /* now partition positive piece's upper left corner */
  28.    inputFace= facePos;
  29.    partitionFaceWithPlane(0.707,-0.707,0.0,0.0,&inputFace,
  30.               &faceOn2,&faceNeg2,&facePos2);
  31.    assert(inputFace == NULL_FACE);
  32.    dumpFace(faceNeg2,"negative side"); dumpFace(facePos2,"positive side");
  33.  
  34.    /* code to free all faces & their vertices goes here */
  35.  
  36.    return(0); 
  37. } /* main() */
  38.  
  39. static void dumpFace(face,string)
  40. FACE *face;
  41. char *string;
  42. {
  43.    VERTEX *vtrav;
  44.  
  45.    if (face == NULL_FACE) {
  46.       (void) printf("%s is empty\n",string);
  47.       return;
  48.    }
  49.  
  50.    (void) printf("begin dump of %s at 0x%x\n",string,face);
  51.    for (vtrav= face->vhead; vtrav != NULL_VERTEX; vtrav= vtrav->vnext) {
  52.       (void) printf("   0x%x: (%lf %lf %lf)\n",vtrav,
  53.             vtrav->xx,vtrav->yy,vtrav->zz);
  54.    }
  55.    (void) printf("end %s\n",string);
  56. } /* dumpFace() */
  57.  
  58. static FACE *getFace()
  59. {
  60.    /* list of vertices for unit square on XY plane about origin */
  61.    static VERTEX square[]= {
  62.        {1.0,-1.0,0.0, NULL_VERTEX},
  63.        {1.0, 1.0,0.0, NULL_VERTEX},
  64.        {-1.0, 1.0,0.0, NULL_VERTEX},
  65.        {-1.0,-1.0,0.0, NULL_VERTEX},
  66.        {1.0,-1.0,0.0, NULL_VERTEX}
  67.    };
  68.    VERTEX *v1, *v2, *v3, *v4, *v5;
  69.    FACE *newFace;
  70.  
  71.    v1= NEWTYPE(VERTEX); assert(v1 != NULL_VERTEX); *v1= square[0];
  72.    v2= NEWTYPE(VERTEX); assert(v2 != NULL_VERTEX); *v2= square[1];
  73.    v3= NEWTYPE(VERTEX); assert(v3 != NULL_VERTEX); *v3= square[2];
  74.    v4= NEWTYPE(VERTEX); assert(v4 != NULL_VERTEX); *v4= square[3];
  75.    v5= NEWTYPE(VERTEX); assert(v5 != NULL_VERTEX); *v5= square[4];
  76.    /* chain vertices */
  77.    v1->vnext= v2; v2->vnext= v3; v3->vnext= v4; v4->vnext= v5; 
  78.  
  79.    /* attach vertex list to a face */
  80.    newFace= NEWTYPE(FACE); assert(newFace != NULL_FACE); newFace->vhead= v1;
  81.  
  82.    return(newFace);
  83. } /* getFace() */
  84.